微信公众号实现微信支付(含前后端完整代码)

您所在的位置:网站首页 uniapp 微信支付开发 微信公众号实现微信支付(含前后端完整代码)

微信公众号实现微信支付(含前后端完整代码)

2024-06-16 05:28| 来源: 网络整理| 查看: 265

刚做完公众号微信支付,记录一下。获取微信支付之前,要先获取用户的基本信息哦!

前端使用uniapp开发的H5,小伙伴们可以照着改一下对应语法 首先来个微信支付的工具类 wxApi.js,这里我放到了项目下的common目录下,代码如下:

/* 微信(公众号)支付方法 */ const wx = require('jweixin-module'); const wexinPay = (data, callback, errorCallback) => { let [appId, timestamp, nonceStr, signature, packages, sign] = [data.appId, data.timeStamp, data.nonceStr, data .sign, data.package, data.sign ]; wx.config({ debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId, // 必填,公众号的唯一标识 timestamp, // 必填,生成签名的时间戳 nonceStr, // 必填,生成签名的随机串 signature, // 必填,签名,见附录1 jsApiList: ['chooseWXPay'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); WeixinJSBridge.invoke( 'getBrandWCPayRequest', { appId: appId, //公众号名称,由商户传入 timeStamp: timestamp, //时间戳,自1970年以来的秒数 nonceStr: nonceStr, //随机串 package: data.package, signType: data.signType, //微信签名方式: paySign: sign //微信签名 }, function(res) { if (res.err_msg == 'get_brand_wcpay_request:ok') { // 使用以上方式判断前端返回,微信团队郑重提示: //res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠。 //支付成功回调 callback(res) /* if (res.err_msg == 'get_brand_wcpay_request:cancel') */ } else{ //支付失败回调 errorCallback(res) } } ) } export default { wexinPay }

然后在页面中调用这个工具类就可以了,调用代码如下:

this.$wxPay(payInfo, function(res) { uni.setStorageSync('type', '1') uni.showToast({ title: '支付成功!', duration: 3000 }) uni.reLaunch({ url: './xxx' }) }, function(e) { uni.showToast({ title: '支付失败!', duration: 3000 }) })

我跳转到了另一个页面,在另一个页面判断type是否等于1,等于1时,修改对应用户表和订单日志表

后端接口代码如下: String appID = xxx; String mchID =xxx; //商户号 String appSecret = xxx; String key = “xxx”;

@Autowired private PayLogService payLogService; @PostMapping("/xxx") public CommonResult wxjspay(HttpServletRequest request,PayLog payLog,@RequestParam(value="openid",required = false)String openid,@RequestParam(value="uid",required = false)String uid) throws Exception { //创建sdk客户端 WXPay wxPay = new WXPay(new WXPayConfigCustom()); //构造请求的参数 Map requestParam = new HashMap(); //生成订单号 时间戳+用户id+6位随机数 Integer ranNum = Math.toIntExact(Math.round((Math.random() + 1) * 1000)); String tradeNo = System.currentTimeMillis()/1000+uid+ranNum; System.out.println("订单号==="+tradeNo); requestParam.put("out_trade_no",tradeNo);//订单号 requestParam.put("body", "vip");//订单描述 requestParam.put("fee_type", "CNY");//人民币 requestParam.put("total_fee", String.valueOf(payLog.getPrice())); //金额 requestParam.put("spbill_create_ip", IPUtils.getIpAddr(request));//客户端ip requestParam.put("notify_url", "none");//微信异步通知支付结果接口,暂时不用 requestParam.put("trade_type", "JSAPI"); log.info("ip地址==="+requestParam.get("spbill_create_ip")); requestParam.put("openid",openid); //调用统一下单接口 Map resp = wxPay.unifiedOrder(requestParam); Map resultMap = new HashMap(); System.out.println("resp===="+resp.toString()); System.out.println("resp.get(\"result_code\"====)"+resp.get("result_code")); if(resp.get("result_code").equals("SUCCESS")){ System.out.println("同意下单接口==="+resp.toString()); //准备h5网页需要的数据 Map jsapiPayParam = new HashMap(); jsapiPayParam.put("appId",appID); jsapiPayParam.put("timeStamp",System.currentTimeMillis()/1000+""); jsapiPayParam.put("nonceStr", UUID.randomUUID().toString());//随机字符串 jsapiPayParam.put("package","prepay_id="+resp.get("prepay_id")); jsapiPayParam.put("signType","HMAC-SHA256"); jsapiPayParam.put("sign", WXPayUtil.generateSignature(jsapiPayParam,key, WXPayConstants.SignType.HMACSHA256)); //将h5网页响应给前端 System.out.println("111==="+jsapiPayParam.toString()); //将数据添加到支付表 payLog.setPubopenId(openid); payLog.setTransaction_id(tradeNo); payLog.setTotal_fee(240000); payLog.setResult_status(1); payLog.setResult_code(resp.get("result_code")); payLog.setReturn_code(resp.get("return_code")); payLog.setReturn_data(resp.get("return_data")); payLogService.addPayLog(payLog); resultMap.put("tradeNo",tradeNo); resultMap.put("jsapiPayParam",jsapiPayParam); return new CommonResult(200,"查询成功",resultMap); }else{ return new CommonResult(100500,resp.get("err_code_des")); } } class WXPayConfigCustom extends WXPayConfig { @Override protected String getAppID() { return appID; } @Override protected String getMchID() { return mchID; } @Override protected String getKey() { return key; } @Override protected InputStream getCertStream() { return null; } @Override protected IWXPayDomain getWXPayDomain() { return new IWXPayDomain() { @Override public void report(String s, long l, Exception e) { } @Override public DomainInfo getDomain(WXPayConfig wxPayConfig) { return new DomainInfo(WXPayConstants.DOMAIN_API,true); } }; } }

在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3